package com.coin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.coin.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.coin.member.dto.UserDto;
import com.coin.model.*;
import com.coin.vo.UseAuthInfoVo;

import java.util.*;

/**
 * @author 李力
 * @description 针对表【user(用户表)】的数据库操作Service
 * @createDate 2025-06-07 10:16:53
 */
public interface UserService extends IService<User> {

    /**
     * @Description: 查询会员的列表
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param:
     * @return:
     */
    Page<User> findByPage(Page<User> page, String mobile, Long userId, String userName, String realName, Integer status);

    /**
     * @Description: 修改用户的状态
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param:
     * @return: R
     */
    boolean updateStatus(Long id, Byte status);

    /**
     * @Description: 修改用户
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param: user
     * @return: R
     */
    boolean updateUser(User user);

    /**
     * @Description: 获取用户的详情
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param: id
     * @return: R
     */
    User getUserInfo(Long id);

    /**
     * @Description: 查询该用户邀请的用户列表
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param:
     * @return: R
     */
    Page<User> findDirectInvitePage(Page<User> page, Long userId);

    /**
     * @Description: 查询用户的审核列表
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param:
     * @return: R
     */
    Page<User> findUserAuths(Page<User> page, String mobile, Long userId, String userName, String realName, Integer reviewsStatus);

    /**
     * @Description: 查询用户的认证详情
     * @Author: 李 力
     * @Date: 2025/6/7
     * @Param:
     * @return: R
     */
    UseAuthInfoVo getUseAuthInfo(Long id);

    /**
     * @Description: 审核
     * @Author: 李 力
     * @Date: 2025/6/9
     * @Param:
     * @return: R
     */
    boolean updateUserAuthStatus(Long id, Byte authStatus, Long authCode, String remark);

    /**
     * @Description: 实名身份认证
     * @Author: 李 力
     * @Date: 2025/6/10
     * @Param:
     * @return: R
     */
    boolean infoCheck(Long userId, UserAuthForm userAuthForm);

    /**
     * @Description: 获取当前登录用户的详情
     * @Author: 李 力
     * @Date: 2025/6/10
     * @Param:
     * @return: R
     */
    User getCurrentUserInfo(Long userId);

    /**
     * @Description: 修改手机号码
     * @Author: 李 力
     * @Date: 2025/6/11
     * @Param:
     * @return: R
     */
    boolean updatePhone(Long userId, UpdatePhoneParam updatePhoneParam);

    /**
     * @Description: 修改登录密码
     * @Author: 李 力
     * @Date: 2025/6/11
     * @Param:
     * @return: R
     */
    boolean updateLoginPwd(Long aLong, updateLoginParam updateLoginParam);

    /**
     * @Description: 修改交易密码
     * @Author: 李 力
     * @Date: 2025/6/11
     * @Param: updateLoginParam
     * @return: R
     */
    boolean updatePayPwd(Long aLong, updateLoginParam updateLoginParam);

    /**
     * @Description: 给管理服务提供远程调用
     * @Author: 李 力
     * @Date: 2025/6/11
     * @Param: ids
     * @return: R
     */
    List<UserDto> getBasicUsers(List<Long> ids);

    /**
     * @Description: 用户的注册
     * @Author: 李 力
     * @Date: 2025/6/11
     * @Param:
     * @return: R
     */
    boolean register(RegisterParam registerParam);

    /**
     * @Description: 给财务系统提供远程调用
     * @Author: 李 力
     * @Date: 2025/6/13
     * @Param:
     * @return: R
     */
    Map<Long, UserDto> getBasicUsers2(List<Long> ids, String userName, String mobile);
}
